package com.wwe.kotlinstudy.util

/**
 * @name KotlinStudy
 * @package name：com.wwe.kotlinstudy.util
 * @anthor DavidZhang
 * @time 2018/4/26 16:54
 * @class describe
 */

/*如果主构造函数中定义的参数使用 val 或者 var 修饰，则会创建与这个参数同名的成员变量，并使用传入的参数值初始化这个成员变量。
简单来说，就是把“定义成员变量”和“使用构造函数传入的参数初始化成员变量”简化为一个 val 或者 var 关键字
不仅如此，如果你的构造器使用的是kotlin默认的访问权限，仍可以进一步省略掉constructor关键字*/

class Person constructor(var name: String = "Big E", var age: Int = 32) {

    init {
        println("init be called")
    }

    override fun toString(): String {
        return "Person(name='$name', age=$age)"
    }

}

class Animal {
    var name: String
    var age: Int

    init {
        println("I am a fish")
        this.name = "anjie"
        this.age = 0;
    }

    constructor() {
        println("I am a black fish")

    }

    //这是一个次构造函数，this(参数列表)调用了我们的主构造函数
    constructor(name: String = "beautiful fish", age: Int = 10) : this() {
        println("second constructor be called")
        this.name = name
        this.age = age
    }

    override fun toString(): String {
        return "Person(name='$name', age=$age)"
    }
}

//这就是默认参数的构造函数的优点
class Tiger (id: Long,age: Int = 0,name: String = "") {
}





















